class BookPlaylistEntity {
  String msg;
  int ret;
  Album album;
  Tracks tracks;

  BookPlaylistEntity({this.msg, this.ret, this.album, this.tracks});

  BookPlaylistEntity.fromJson(Map<String, dynamic> json) {
    msg = json['msg'];
    ret = json['ret'];
    album = json['album'] != null ? new Album.fromJson(json['album']) : null;
    tracks = json['tracks'] != null ? new Tracks.fromJson(json['tracks']) : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['msg'] = this.msg;
    data['ret'] = this.ret;
    if (this.album != null) {
      data['album'] = this.album.toJson();
    }
    if (this.tracks != null) {
      data['tracks'] = this.tracks.toJson();
    }
    return data;
  }
}

class Album {
  int albumId;
  int categoryId;
  String categoryName;
  String title;
  String coverOrigin;
  String coverSmall;
  String coverMiddle;
  String coverLarge;
  String coverWebLarge;
  String coverLargePop;
  int createdAt;
  int updatedAt;
  int uid;
  String nickname;
  String avatarPath;
  int followers;
  bool isFollowed;
  String intro;
  int saleScope;
  int shareSupportType;
  int originalStatus;
  String shortIntro;
  String introRich;
  String shortIntroRich;
  String tags;
  int tracks;
  int shares;
  bool hasNew;
  bool isFavorite;
  int playTimes;
  int lastUptrackAt;
  int lastUptrackId;
  String lastUptrackTitle;
  String lastUptrackCoverPath;
  int status;
  int serializeStatus;
  int playTrackId;
  bool isRecordDesc;
  bool isPaid;
  bool isAuthorized;
  int authorizedTypeId;
  int authorizedExpireTime;
  int refundSupportType;
  bool canShareAndStealListen;
  bool canInviteListen;
  bool isVipFree;
  bool isDraft;
  int vipFreeType;
  bool isDefault;
  String salePoint;
  String recommendReason;
  String salePointPopup;
  int offlineType;
  int offlineReason;
  int unReadAlbumCommentCount;
  String customTitle;
  int type;
  int freeToPaidStatus;
  int freeToPaidTime;
  String customSubTitle;
  bool followed;
  bool recordDesc;
  bool paid;
  bool authorized;
  bool vipFree;
  bool draft;

  Album({this.albumId, this.categoryId, this.categoryName, this.title, this.coverOrigin, this.coverSmall, this.coverMiddle, this.coverLarge, this.coverWebLarge, this.coverLargePop, this.createdAt, this.updatedAt, this.uid, this.nickname, this.avatarPath, this.followers, this.isFollowed, this.intro, this.saleScope, this.shareSupportType, this.originalStatus, this.shortIntro, this.introRich, this.shortIntroRich, this.tags, this.tracks, this.shares, this.hasNew, this.isFavorite, this.playTimes, this.lastUptrackAt, this.lastUptrackId, this.lastUptrackTitle, this.lastUptrackCoverPath, this.status, this.serializeStatus, this.playTrackId, this.isRecordDesc, this.isPaid, this.isAuthorized, this.authorizedTypeId, this.authorizedExpireTime, this.refundSupportType, this.canShareAndStealListen, this.canInviteListen, this.isVipFree, this.isDraft, this.vipFreeType, this.isDefault, this.salePoint, this.recommendReason, this.salePointPopup, this.offlineType, this.offlineReason, this.unReadAlbumCommentCount, this.customTitle, this.type, this.freeToPaidStatus, this.freeToPaidTime, this.customSubTitle, this.followed, this.recordDesc, this.paid, this.authorized, this.vipFree, this.draft});

Album.fromJson(Map<String, dynamic> json) {
albumId = json['albumId'];
categoryId = json['categoryId'];
categoryName = json['categoryName'];
title = json['title'];
coverOrigin = json['coverOrigin'];
coverSmall = json['coverSmall'];
coverMiddle = json['coverMiddle'];
coverLarge = json['coverLarge'];
coverWebLarge = json['coverWebLarge'];
coverLargePop = json['coverLargePop'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
uid = json['uid'];
nickname = json['nickname'];
avatarPath = json['avatarPath'];
followers = json['followers'];
isFollowed = json['isFollowed'];
intro = json['intro'];
saleScope = json['saleScope'];
shareSupportType = json['shareSupportType'];
originalStatus = json['originalStatus'];
shortIntro = json['shortIntro'];
introRich = json['introRich'];
shortIntroRich = json['shortIntroRich'];
tags = json['tags'];
tracks = json['tracks'];
shares = json['shares'];
hasNew = json['hasNew'];
isFavorite = json['isFavorite'];
playTimes = json['playTimes'];
lastUptrackAt = json['lastUptrackAt'];
lastUptrackId = json['lastUptrackId'];
lastUptrackTitle = json['lastUptrackTitle'];
lastUptrackCoverPath = json['lastUptrackCoverPath'];
status = json['status'];
serializeStatus = json['serializeStatus'];
playTrackId = json['playTrackId'];
isRecordDesc = json['isRecordDesc'];
isPaid = json['isPaid'];
isAuthorized = json['isAuthorized'];
authorizedTypeId = json['authorizedTypeId'];
authorizedExpireTime = json['authorizedExpireTime'];
refundSupportType = json['refundSupportType'];
canShareAndStealListen = json['canShareAndStealListen'];
canInviteListen = json['canInviteListen'];
isVipFree = json['isVipFree'];
isDraft = json['isDraft'];
vipFreeType = json['vipFreeType'];
isDefault = json['isDefault'];
isDefault = json['is_default'];
salePoint = json['salePoint'];
recommendReason = json['recommendReason'];
salePointPopup = json['salePointPopup'];
offlineType = json['offlineType'];
offlineReason = json['offlineReason'];
unReadAlbumCommentCount = json['unReadAlbumCommentCount'];
customTitle = json['customTitle'];
type = json['type'];
freeToPaidStatus = json['freeToPaidStatus'];
freeToPaidTime = json['freeToPaidTime'];
customSubTitle = json['customSubTitle'];
followed = json['followed'];
recordDesc = json['recordDesc'];
paid = json['paid'];
authorized = json['authorized'];
vipFree = json['vipFree'];
draft = json['draft'];
}

Map<String, dynamic> toJson() {
  final Map<String, dynamic> data = new Map<String, dynamic>();
  data['albumId'] = this.albumId;
  data['categoryId'] = this.categoryId;
  data['categoryName'] = this.categoryName;
  data['title'] = this.title;
  data['coverOrigin'] = this.coverOrigin;
  data['coverSmall'] = this.coverSmall;
  data['coverMiddle'] = this.coverMiddle;
  data['coverLarge'] = this.coverLarge;
  data['coverWebLarge'] = this.coverWebLarge;
  data['coverLargePop'] = this.coverLargePop;
  data['createdAt'] = this.createdAt;
  data['updatedAt'] = this.updatedAt;
  data['uid'] = this.uid;
  data['nickname'] = this.nickname;
  data['avatarPath'] = this.avatarPath;
  data['followers'] = this.followers;
  data['isFollowed'] = this.isFollowed;
  data['intro'] = this.intro;
  data['saleScope'] = this.saleScope;
  data['shareSupportType'] = this.shareSupportType;
  data['originalStatus'] = this.originalStatus;
  data['shortIntro'] = this.shortIntro;
  data['introRich'] = this.introRich;
  data['shortIntroRich'] = this.shortIntroRich;
  data['tags'] = this.tags;
  data['tracks'] = this.tracks;
  data['shares'] = this.shares;
  data['hasNew'] = this.hasNew;
  data['isFavorite'] = this.isFavorite;
  data['playTimes'] = this.playTimes;
  data['lastUptrackAt'] = this.lastUptrackAt;
  data['lastUptrackId'] = this.lastUptrackId;
  data['lastUptrackTitle'] = this.lastUptrackTitle;
  data['lastUptrackCoverPath'] = this.lastUptrackCoverPath;
  data['status'] = this.status;
  data['serializeStatus'] = this.serializeStatus;
  data['playTrackId'] = this.playTrackId;
  data['isRecordDesc'] = this.isRecordDesc;
  data['isPaid'] = this.isPaid;
  data['isAuthorized'] = this.isAuthorized;
  data['authorizedTypeId'] = this.authorizedTypeId;
  data['authorizedExpireTime'] = this.authorizedExpireTime;
  data['refundSupportType'] = this.refundSupportType;
  data['canShareAndStealListen'] = this.canShareAndStealListen;
  data['canInviteListen'] = this.canInviteListen;
  data['isVipFree'] = this.isVipFree;
  data['isDraft'] = this.isDraft;
  data['vipFreeType'] = this.vipFreeType;
  data['isDefault'] = this.isDefault;
  data['is_default'] = this.isDefault;
  data['salePoint'] = this.salePoint;
  data['recommendReason'] = this.recommendReason;
  data['salePointPopup'] = this.salePointPopup;
  data['offlineType'] = this.offlineType;
  data['offlineReason'] = this.offlineReason;
  data['unReadAlbumCommentCount'] = this.unReadAlbumCommentCount;
  data['customTitle'] = this.customTitle;
  data['type'] = this.type;
  data['freeToPaidStatus'] = this.freeToPaidStatus;
  data['freeToPaidTime'] = this.freeToPaidTime;
  data['customSubTitle'] = this.customSubTitle;
  data['followed'] = this.followed;
  data['recordDesc'] = this.recordDesc;
  data['paid'] = this.paid;
  data['authorized'] = this.authorized;
  data['vipFree'] = this.vipFree;
  data['draft'] = this.draft;
  return data;
}
}

class Tracks {
  List<ListX> list;
  int pageId;
  int pageSize;
  int maxPageId;
  int totalCount;

  Tracks({this.list, this.pageId, this.pageSize, this.maxPageId, this.totalCount});

  Tracks.fromJson(Map<String, dynamic> json) {
    if (json['list'] != null) {
      list = new List<ListX>();
      json['list'].forEach((v) { list.add(new ListX.fromJson(v)); });
    }
    pageId = json['pageId'];
    pageSize = json['pageSize'];
    maxPageId = json['maxPageId'];
    totalCount = json['totalCount'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.list != null) {
      data['list'] = this.list.map((v) => v.toJson()).toList();
    }
    data['pageId'] = this.pageId;
    data['pageSize'] = this.pageSize;
    data['maxPageId'] = this.maxPageId;
    data['totalCount'] = this.totalCount;
    return data;
  }
}

class ListX {
  int trackId;
  int uid;
  String playUrl64;
  String playUrl32;
  String playPathHq;
  String playPathAacv164;
  String playPathAacv224;
  String title;
  int duration;
  int albumId;
  bool isPaid;
  bool isVideo;
  bool isDraft;
  bool isRichAudio;
  int type;
  int relatedId;
  bool isHoldCopyright;
  int vipFirstStatus;
  int processState;
  int createdAt;
  String coverSmall;
  String coverMiddle;
  String coverLarge;
  String nickname;
  String smallLogo;
  int userSource;
  int opType;
  bool isPublic;
  int likes;
  int playtimes;
  int comments;
  int shares;
  int status;

  ListX({this.trackId, this.uid, this.playUrl64, this.playUrl32, this.playPathHq, this.playPathAacv164, this.playPathAacv224, this.title, this.duration, this.albumId, this.isPaid, this.isVideo, this.isDraft, this.isRichAudio, this.type, this.relatedId, this.isHoldCopyright, this.vipFirstStatus, this.processState, this.createdAt, this.coverSmall, this.coverMiddle, this.coverLarge, this.nickname, this.smallLogo, this.userSource, this.opType, this.isPublic, this.likes, this.playtimes, this.comments, this.shares, this.status});

  ListX.fromJson(Map<String, dynamic> json) {
    trackId = json['trackId'];
    uid = json['uid'];
    playUrl64 = json['playUrl64'];
    playUrl32 = json['playUrl32'];
    playPathHq = json['playPathHq'];
    playPathAacv164 = json['playPathAacv164'];
    playPathAacv224 = json['playPathAacv224'];
    title = json['title'];
    duration = json['duration'];
    albumId = json['albumId'];
    isPaid = json['isPaid'];
    isVideo = json['isVideo'];
    isDraft = json['isDraft'];
    isRichAudio = json['isRichAudio'];
    type = json['type'];
    relatedId = json['relatedId'];
    isHoldCopyright = json['isHoldCopyright'];
    vipFirstStatus = json['vipFirstStatus'];
    processState = json['processState'];
    createdAt = json['createdAt'];
    coverSmall = json['coverSmall'];
    coverMiddle = json['coverMiddle'];
    coverLarge = json['coverLarge'];
    nickname = json['nickname'];
    smallLogo = json['smallLogo'];
    userSource = json['userSource'];
    opType = json['opType'];
    isPublic = json['isPublic'];
    likes = json['likes'];
    playtimes = json['playtimes'];
    comments = json['comments'];
    shares = json['shares'];
    status = json['status'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['trackId'] = this.trackId;
    data['uid'] = this.uid;
    data['playUrl64'] = this.playUrl64;
    data['playUrl32'] = this.playUrl32;
    data['playPathHq'] = this.playPathHq;
    data['playPathAacv164'] = this.playPathAacv164;
    data['playPathAacv224'] = this.playPathAacv224;
    data['title'] = this.title;
    data['duration'] = this.duration;
    data['albumId'] = this.albumId;
    data['isPaid'] = this.isPaid;
    data['isVideo'] = this.isVideo;
    data['isDraft'] = this.isDraft;
    data['isRichAudio'] = this.isRichAudio;
    data['type'] = this.type;
    data['relatedId'] = this.relatedId;
    data['isHoldCopyright'] = this.isHoldCopyright;
    data['vipFirstStatus'] = this.vipFirstStatus;
    data['processState'] = this.processState;
    data['createdAt'] = this.createdAt;
    data['coverSmall'] = this.coverSmall;
    data['coverMiddle'] = this.coverMiddle;
    data['coverLarge'] = this.coverLarge;
    data['nickname'] = this.nickname;
    data['smallLogo'] = this.smallLogo;
    data['userSource'] = this.userSource;
    data['opType'] = this.opType;
    data['isPublic'] = this.isPublic;
    data['likes'] = this.likes;
    data['playtimes'] = this.playtimes;
    data['comments'] = this.comments;
    data['shares'] = this.shares;
    data['status'] = this.status;
    return data;
  }
}
